Zenpyを使いはじめました | python, Zendesk
ベルリンは涼しいです。はんせです。
はじめに
これまでZendeskをpythonでいじるときはCore APIをrequests
でそのままエンドポイントを叩いていました。が、Zenpyなるものによって、よりシンプルにコードが書けることを今更知りました。
内容
Zenpyのインストールと基本APIの実行方法についてご紹介します。
- Zenpyのインストール
- credentialとオブジェクト作成
- チケット検索をする
- チケットの各種情報(キー)を取り出してみる
- ユーザー情報も取り出してみる
- チケットを更新する
インストール
pip install zenpy
Zenpyはpython2、python3両方をサポートしてます。
クレデンシャルとオブジェクト作成
クレデンシャルを用意します
cred = { "token": "zendesknotoken", "email": "hanse.kohei@classmethod.jp", "subdomain": "zendesknosubdomain" }
token
にはZendesk APIキーを記載しますemail
にはZendesk APIキーを発行したZendeskユーザーのemailアドレスを記載しますsubdomain
にはZendeskのサブドメインを記載します(xxx.zendesk.comのxxxの部分)
zenpy_client
オブジェクトを作成します
% python Python 3.6.2 (default, Jan 9 2018, 15:22:48) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from zenpy import Zenpy >>> creds = { ... "token": "zendesknotoken", ... "email": "hanse.kohei@classmethod.jp", ... "subdomain": "zendesknosubdomain" ... } >>> zenpy_client = Zenpy(**creds) >>>
できました
チケット検索をする
Search APIをZenpyで試します。サーチクエリの詳細はココにあります。
datetime
を使って、1週間前までに作成されたものを検索してみます。
forで回してprintをするなどで、検索結果をチェックします。
sandbox環境で実行してみます。
>>> zenpy_client = Zenpy(**creds) >>> two_weeks_ago = datetime.datetime.now() - datetime.timedelta(days=14) >>> import datetime >>> two_weeks_ago = datetime.datetime.now() - datetime.timedelta(days=14) >>> today = datetime.datetime.now() >>> for ticket in zenpy_client.search("test", created_between=[two_weeks_ago, today], type='ticket'): ... print(ticket) ... Ticket(id=947) Ticket(id=949)
Zendeskチケット #947
と#949
が検索に引っかかりました。
蛇足ですが、これは以下のAPIリクエストと同じ結果です。
% curl 'https://zendesknosubdomain.zendesk.com/api/v2/search.json' -G --data-urlencode 'query=test created<2018-08-12 created>2018-07-30 type:ticket' -u 'hanse.kohei@classmethod.jp/token:zendesknotoken'| jq -r ".results[] | .id" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 6533 100 6533 0 0 7055 0 --:--:-- --:--:-- --:--:-- 7055 947 949
チケットの各種情報(キー)を取り出してみる
SandboxのZendeskチケットID#947
に対してチケット情報を取得してみます。
>>> zenpy_client = Zenpy(**creds) >>> ticket = zenpy_client.tickets(id=947)
これで入りました。順にチケットID, チケットurl, チケット作成時刻を取得してみます。
>>> ticket.id 947 >>> ticket.url 'https://zendesknosubdomain.zendesk.com/api/v2/tickets/947.json' >>> ticket.created_at '2018-08-05T13:11:31Z'
取得できるチケットのキーはこちらをご参考。
これまた蛇足ですが、前項のSearchの出力結果と組み合わせてみます
>>> for ticket in zenpy_client.search("test", created_between=[two_weeks_ago, today], type='ticket'): ... print(ticket.url) https://zendesknosubdomain.zendesk.com/api/v2/tickets/947.json https://zendesknosubdomain.zendesk.com/api/v2/tickets/949.json
シンプルです。
ユーザー情報も取り出してみる
同じ要領でユーザーも取り出してみます
>>> zenpy_client.users(id=25252472687) User(id=25252472687) >>> user = zenpy_client.users(id=25252472687) >>> user.id 25252472687 >>> user.name 'hanse-berlin' >>> user.email 'koheihansetest@gmail.com'
簡単ですね。
チケットを更新する
最後にチケット更新を試します。社内メモを付与してみます。
Zenpyの既定ライブラリからapi用のオブジェクトジェネレーター(?)クラスをインポートする必要があります。
このような形です。
>>> from zenpy.lib.api_objects import Comment >>> body = 'test hanse ahaha' >>> comment = Comment(body=body, public=False) >>> print(comment.body) test hanse ahaha
commentオブジェクトのbodyに「test hanse ahaha」が入りました。
今はチケットに社内メモを追加する(プライベートコメントの追加をする)のみですので、Comment
を使用しますが、ユーザーやグループ情報の更新などには、ほかのクラスを使用します。詳細はこちら
Zendeskチケット#947
に社内メモ追加のアップデートを実行してみます。
>>> from zenpy.lib.api_objects import Comment >>> ticket = zenpy_client.tickets(id=947) >>> body = 'test hanse ahaha' >>> ticket.comment = Comment(body=body, public=False) >>> zenpy_client.tickets.update(ticket) TicketAudit()
実際にはチケットオブジェクトのキーticket.comment
にbody
を追加し(社内メモなのでpublic
をFalse
とします)、アップデートを実行するという流れになります。
社内メモが追加されました。
以上です
zenpyの基本的な操作をご紹介しました。
ではまた〜。